//
//  MainViewController.swift
//  JKWeiBo
//
//  Created by 王冲 on 2017/5/18.
//  Copyright © 2017年 希爱欧科技有限公司. All rights reserved.
//

import UIKit

class MainViewController: UITabBarController {

    override func viewDidLoad() {
        super.viewDidLoad()
        
        // 设置当前控制器对应的tabbar对应的颜色
        // 注意：在ios7以前如果设置了tintColor只会改变字的颜色，图片的颜色不会改变
        //tabBar.tintColor = UIColor.orange
      
        addChileControllers()
        
        // ios 7.0 以后就不推荐大家在viewDidLoad中设置frame
    }
    
    override func viewWillAppear(_ animated: Bool) {
        
        super.viewWillAppear(animated)
        
        // 添加加号按钮
        setcomposeBtn()
    }
    
    func setcomposeBtn() {
        
        // 1.添加加号按钮
        tabBar.addSubview(composeBtn)
        
        // 2.调整加号按钮的位置
        let width = UIScreen.main.bounds.size.width / CGFloat(viewControllers!.count)
        let rect = CGRect(x: 0,y: 0,width: width,height: 49)
        // rect:frame dx: x方向的偏移位置 dy: y 方向的偏移位置
        composeBtn.frame = rect.offsetBy(dx: 2*width,dy: 0)
    }
    
//    // MARK: 添加子控制器
//    private func addChileControllers(){
//    
//        addChildViewController(childController: HomeViewController(), tittle: "首页", imageName: "tabbar_home")
//        addChildViewController(childController: MessageViewController(), tittle: "消息", imageName: "tabbar_message_center")
//        addChildViewController(childController: DiscoverViewController(), tittle: "广场", imageName: "tabbar_discover")
//        addChildViewController(childController: ProfileViewController(), tittle: "我", imageName: "tabbar_profile")
//    
//    }
//
//    // MARK: 具体的每个控制器的操作
//    private func addChildViewController(childController: UIViewController,tittle:String ,imageName:String) {
//        
//        // 1.设置首页对应的数据
//        childController.tabBarItem.image = UIImage(named: imageName)
//        childController.tabBarItem.selectedImage = UIImage(named: imageName + "_highlighted")
//        childController.title = tittle
//        
//        // 2.给子控制器包装一个导航控制器
//        let nav = UINavigationController()
//        nav.addChildViewController(childController)
//        
//        // 3.将导航控制器添加到当前控制器上
//        addChildViewController(nav)
//        
//    }
    
    // MARK: 添加子控制器
    private func addChileControllers(){
        
        
        // 1.获取json文件路径
        let path = Bundle.main.path(forResource: "MainVCSettings.json", ofType: nil)
        // 2.通过文件路径创建data
        if let jsonPath = path{
        
            let jsonData = NSData(contentsOfFile: jsonPath)
            
            do {
                // 有可能发生异常的代码放到这里
                // 3.序列化json数据 --> Array
                // try : 发生异常会跳到catch 中继续执行
                let dictArr =  try JSONSerialization.jsonObject(with: jsonData! as Data, options: JSONSerialization.ReadingOptions.mutableContainers)
                
                // 4.遍历数组，动态创建控制器和设置数据
                // 在Swift中，如果需要遍历一个数组，必须明确数据的类型
                
                for dict in dictArr as! [[String: String]] {
                    
                    addChildViewController(childControllerName: dict["vcName"]!, tittle: dict["title"]!, imageName: dict["imageName"]!)
                }
                
                //print(dictArr)
                
            } catch {
                
                // 发生异常会执行的代码
                print(error)
                
                // 从本地加载控制器
                addChildViewController(childControllerName: "HomeViewController", tittle: "首页", imageName: "tabbar_home")
                addChildViewController(childControllerName: "MessageViewController", tittle: "消息", imageName: "tabbar_message_center")
                 addChildViewController(childControllerName: "AddMiddleViewController", tittle: "", imageName: "")
                addChildViewController(childControllerName: "DiscoverViewController", tittle: "广场", imageName: "tabbar_discover")
                addChildViewController(childControllerName: "ProfileViewController", tittle: "我", imageName: "tabbar_profile")
            }
            
        }
   
    }
    
    // MARK: 具体的每个控制器的操作
    private func addChildViewController(childControllerName: String,tittle:String ,imageName:String) {
        
        // 1.动态获取命名空间
        let namespace = Bundle.main.infoDictionary!["CFBundleExecutable"] as! String
        
        // 2.将字符串转换为类
        // 2.1.默认情况下命名空间就是项目的名称，但是命名空间的名称是可以更改的
        let Class: AnyClass? = NSClassFromString(namespace + "." + childControllerName)
        
        // 3.通过类创建对象
        // 3.1.将AnyClass 转化为指定的类
        let vcClass = Class as! UIViewController.Type
        
        // 4.通过class创建对象
        let vc = vcClass.init()
        
        // 1.设置首页对应的数据
        vc.tabBarItem.image = UIImage(named: imageName)
        vc.tabBarItem.selectedImage = UIImage(named: imageName + "_highlighted")
        vc.title = tittle
        
        // 2.给子控制器包装一个导航控制器
        let nav = UINavigationController()
        nav.addChildViewController(vc)
        
        // 3.将导航控制器添加到当前控制器上
        addChildViewController(nav)
    }
    
    // MARK: - 懒加载 加号按钮
    private lazy var composeBtn: UIButton = {
    
        let btn = UIButton()
        // btn 的加号按钮
        btn.setImage(UIImage(named: "tabbar_compose_icon_add"), for: UIControlState.normal)
        btn.setImage(UIImage(named: "tabbar_compose_icon_add_highlighted"), for: UIControlState.highlighted)
        // btn 的背景图片
        btn.setBackgroundImage(UIImage(named: "tabbar_compose_button"), for: UIControlState.normal)
        btn.setBackgroundImage(UIImage(named: "tabbar_compose_button_highlighted"), for: UIControlState.highlighted)
        btn.addTarget(self, action: #selector(MainViewController.tap), for: UIControlEvents.touchUpInside)
        return btn
    }()
    
    // MARK: 加号的点击事件
    func tap() {
        
        print("kkkkk")

        let nav = UINavigationController(rootViewController: AddMiddleViewController())
        present(nav, animated: true, completion: nil)
    }
}
